package com.xiaoma.pattern.singleton;

/**
 * 懒汉模式，所谓“懒”，就是在需要的时候才去创建
 * @author xiaomacdut
 * @date 2020年2月27日 下午10:33:53
 */
public class Singleton{
    
    private volatile static Singleton singleton;
    
    private Singleton(){}
    
    public static Singleton getSingleton(){
        //为了保证singleton线程安全，可以直接加锁，但是这样 每次方法调用都需要获取与释放锁，开销很大。
        //所以singleton用volatile修饰，保证可见性
        if(singleton == null){
            synchronized(Singleton.class){
                if(singleton == null){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }

    public static void main(String[] args) {
        Singleton.getSingleton();
    }

}